﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace ControleRepresentante.Logic.Models
{
    public class Cliente : UsuariosHolder
    {
        private readonly IList<Pedido> m_Pedidos;
        private readonly IList<RelatorioVisita> m_RelatorioVisitas;
        private string m_VendedorNome;

        public Cliente()
        {
            m_Pedidos = new List<Pedido>();
            m_RelatorioVisitas = new List<RelatorioVisita>();
        }

        [Required(ErrorMessage = "*")]
        public virtual string RazaoSocial { get; set; }
        public virtual string NomeFantasia { get; set; }
        public virtual Vendedor Vendedor { get; set; }
        public virtual Endereco EnderecoEntrega { get; set; }
        public virtual Endereco EnderecoCobranca { get; set; }
        public virtual string CNPJ { get; set; }
        public virtual string InscricaoEstadual { get; set; }
        public virtual IEnumerable<Pedido> Pedidos { get { return m_Pedidos; } }
        public virtual IEnumerable<RelatorioVisita> RelatorioVisitas { get { return m_RelatorioVisitas; } }
        public virtual DateTime? ClienteDesde { get; set; }

        public virtual string VendedorNome
        {
            get { return m_VendedorNome ?? (Vendedor == null ? null : Vendedor.Nome); }
            set { m_VendedorNome = value; }
        }
        public virtual ClienteJolitex ClienteJolitex { get; protected set; }
        public virtual DateTime? LastPedido { get; set; }

        public virtual void SetClienteJolitex()
        {
            ClienteJolitex = new ClienteJolitex(this);
        }
    }

    public class ClienteJolitex : ModelBase
    {
        internal ClienteJolitex(Cliente cliente)
        {
            Cliente = cliente;
        }

        protected ClienteJolitex()
        {
        }

        public virtual int? Codigo { get; set; }
        public virtual int? Regiao { get; set; }
        protected virtual internal Cliente Cliente { get; protected set; }

        public override Guid Id
        {
            get { return Cliente.Id; }
            set { }
        }
    }
}
